TeamStats.tsx ➔ getData   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 3
c 0
b 0
f 0
rs 10
cc 1
1
import { useSiteMetaData } from "../hooks/use-site-metadata"
2
import iconCardRed from "../images/i_card_red.png"
3
import iconCardYellow from "../images/i_card_yellow.png"
4
import iconCleansheet from "../images/i_cleansheet.png"
5
import iconGoal from "../images/i_goal.png"
6
import { request, translateGameResult } from "../scripts/helper"
7
import { Card } from "./Card"
8
import Icon from "./Icon"
9
import { Spinner } from "./Spinner"
10
import "./TeamStats.scss"
11
import React from "react"
12
import { useEffect, useState } from "react"
13
14
const TeamStats = ({ teamId = 1 }: TeamStatsProps) => {
15
  const [data, setData] = useState<TeamStatsDataObject>()
16
  const { kcvvPsdApi } = useSiteMetaData()
17
18
  useEffect(() => {
19
    async function getData() {
20
      const response = await request.get(`${kcvvPsdApi}/stats/team/${teamId}`)
21
      setData(response.data)
22
    }
23
    getData()
24
  }, [kcvvPsdApi, teamId])
25
26
  return (
27
    <section className="team__stats__wrapper">
28
      {data !== null || <Spinner />}
29
      {data && renderTeamStats(data)}
30
      {data && renderTeamSquadStats(data)}
31
    </section>
32
  )
33
}
34
35
const renderTeamStats = ({ extraStats }: TeamStatsDataObject) => (
36
  <Card className="team__stats__team" title="Statistieken">
37
    <section className="team__stats__stats">
38
      <span className="team__stats__label">Gespeeld</span>
39
      <span>{extraStats.gamesPlayed}</span>
40
      <span className="team__stats__label">Gewonnen</span>
41
      <span>{extraStats.gamesWon}</span>
42
      <span className="team__stats__label">Gelijk</span>
43
      <span>{extraStats.gamesEqual}</span>
44
      <span className="team__stats__label">Verloren</span>
45
      <span>{extraStats.gamesLost}</span>
46
      <span className="team__stats__label">Cleansheets</span>
47
      <span>{extraStats.cleanSheets}</span>
48
      <span className="team__stats__label">Gele kaarten</span>
49
      <span>{extraStats.yellowCards}</span>
50
      <span className="team__stats__label">Rode kaarten</span>
51
      <span>{extraStats.redCards}</span>
52
      <span className="team__stats__label">Wedstrijden niet gescoord</span>
53
      <span>{extraStats.notScored}</span>
54
      <span className="team__stats__label">Grootste overwinning</span>
55
      <span>
56
        {extraStats.biggestWin.result} tegen {extraStats.biggestWin.opponent}
57
      </span>
58
      <span className="team__stats__label">Grootste verlies</span>
59
      <span>
60
        {extraStats.biggestLoss.result} tegen {extraStats.biggestLoss.opponent}
61
      </span>
62
      <span className="team__stats__label">Meeste doelpunten</span>
63
      <span>
64
        {extraStats.mostGoals.result} tegen {extraStats.mostGoals.opponent}
65
      </span>
66
      <span className="team__stats__label">Topschutters</span>
67
      <ul className="team__stats__list">
68
        {extraStats.topscorers
69
          .sort((a, b) => b.value - a.value)
70
          .map((player, i) => (
71
            <li key={i}>
72
              {player.firstName} {player.lastName} ({player.value})
73
            </li>
74
          ))}
75
      </ul>
76
      <span className="team__stats__label">Laatste wedstrijden</span>
77
      <span>
78
        {extraStats.gameStreak.map((game, i) => (
79
          <span
80
            key={i}
81
            className={`team__stats__streak team__stats__streak--${game.result.toLowerCase()}`}
82
            title={`${translateGameResult(game.result)}`}
83
          >
84
            {game.result.charAt(0) !== `E` ? game.result.charAt(0) : `D`}
85
          </span>
86
        ))}
87
      </span>
88
    </section>
89
    <table className="team__stats__bars">
90
      <tbody>
91
        <tr>
92
          <th className="team__stats__bars__title" colSpan={3} scope="row">
93
            Doelpunten
94
          </th>
95
        </tr>
96
        <tr className="team__stats__goals">
97
          <td className="team__stats__bars__label">{extraStats.goalsScored || `0`}</td>
98
          <td className="team__stats__bars__bars">
99
            <div className="team__stats__bars__bars__wrapper">
100
              <span
101
                className="team__stats__bars__bars__percent team__stats__bars__bars__percent--home"
102
                style={{
103
                  width: `calc(100% * ${extraStats.goalsScored / (extraStats.goalsScored + extraStats.goalsAgainst)})`,
104
                }}
105
              >
106
                {extraStats.goalsScored}
107
              </span>
108
              <span
109
                className="team__stats__bars__bars__percent team__stats__bars__bars__percent--away"
110
                style={{
111
                  width: `calc(100% * ${extraStats.goalsAgainst / (extraStats.goalsScored + extraStats.goalsAgainst)})`,
112
                }}
113
              >
114
                {extraStats.goalsAgainst}
115
              </span>
116
            </div>
117
          </td>
118
          <td className="team__stats__bars__label">{extraStats.goalsAgainst || `0`}</td>
119
        </tr>
120
        <tr>
121
          <th className="team__stats__bars__title" colSpan={3} scope="row">
122
            Wedstrijden
123
          </th>
124
        </tr>
125
        <tr className="team__stats__goals">
126
          <td className="team__stats__bars__label">{extraStats.gamesWon}</td>
127
          <td className="team__stats__bars__bars">
128
            <div className="team__stats__bars__bars__wrapper">
129
              <span
130
                className="team__stats__bars__bars__percent team__stats__bars__bars__percent--home"
131
                style={{
132
                  width: `calc(100% * ${extraStats.gamesWon / extraStats.gamesPlayed})`,
133
                }}
134
              >
135
                {extraStats.gamesWon}
136
              </span>
137
              <span
138
                className="team__stats__bars__bars__percent team__stats__bars__bars__percent--away"
139
                style={{
140
                  width: `calc(100% * ${extraStats.gamesLost / extraStats.gamesPlayed})`,
141
                }}
142
              >
143
                {extraStats.gamesLost}
144
              </span>
145
            </div>
146
          </td>
147
          <td className="team__stats__bars__label">{extraStats.gamesLost}</td>
148
        </tr>
149
        <tr>
150
          <th className="team__stats__bars__title" colSpan={3} scope="row">
151
            Cleansheets vs niet gescoord
152
          </th>
153
        </tr>
154
        <tr className="team__stats__goals">
155
          <td className="team__stats__bars__label">{extraStats.cleanSheets}</td>
156
          <td className="team__stats__bars__bars">
157
            <div className="team__stats__bars__bars__wrapper">
158
              <span
159
                className="team__stats__bars__bars__percent team__stats__bars__bars__percent--home"
160
                style={{
161
                  width: `calc(100% * ${extraStats.cleanSheets / (extraStats.cleanSheets + extraStats.notScored)})`,
162
                }}
163
              >
164
                {extraStats.cleanSheets}
165
              </span>
166
              <span
167
                className="team__stats__bars__bars__percent team__stats__bars__bars__percent--away"
168
                style={{
169
                  width: `calc(100% * ${extraStats.notScored / (extraStats.cleanSheets + extraStats.notScored)})`,
170
                }}
171
              >
172
                {extraStats.notScored}
173
              </span>
174
            </div>
175
          </td>
176
          <td className="team__stats__bars__label">{extraStats.notScored}</td>
177
        </tr>
178
      </tbody>
179
    </table>
180
  </Card>
181
)
182
183
const renderTeamSquadStats = ({ squadPlayerStatistics }: TeamStatsDataObject) => {
184
  squadPlayerStatistics.sort((a, b) => b.minutes - a.minutes)
185
186
  return (
187
    <Card className="team__stats__players" title="Spelers" hasTable={true}>
188
      <table className="team__stats__players_overview">
189
        <thead>
190
          <tr>
191
            <th className="table__column__string">Speler</th>
192
            <th className="table__column__number show-for-medium">
193
              <span title="Wedstrijden gespeeld">P</span>
194
            </th>
195
            <th className="table__column__number">
196
              <span title="Wedstrijden gewonnen">W</span>
197
            </th>
198
            <th className="table__column__number">
199
              <span title="Wedstrijden gelijkgespeeld">D</span>
200
            </th>
201
            <th className="table__column__number">
202
              <span title="Wedstrijden verloren">L</span>
203
            </th>
204
            <th className="table__column__number">
205
              <img src={iconCardYellow} title="Gele kaart" alt="Gele kaart" className="table__header__icon" />
206
            </th>
207
            <th className="table__column__number">
208
              <img src={iconCardRed} title="Rode kaart" alt="Rode kaart" className="table__header__icon" />
209
            </th>
210
            <th className="table__column__number">
211
              <img
212
                src={iconGoal}
213
                title="Doelpunt(en) gescoord"
214
                alt="Doelpunt(en) gescoord"
215
                className="table__header__icon"
216
              />
217
            </th>
218
            <th className="table__column__number show-for-medium">
219
              <img src={iconCleansheet} title="Cleansheets" alt="Cleansheets" className="table__header__icon" />
220
            </th>
221
            <th className="table__column__number">
222
              <span title="Minuten gespeeld">
223
                <Icon icon="fa-clock-o" />
224
              </span>
225
            </th>
226
          </tr>
227
        </thead>
228
        <tbody>
229
          {squadPlayerStatistics
230
            .sort((a, b) => b.minutes - a.minutes)
231
            .map(function (player, i) {
232
              return (
233
                <tr key={i}>
234
                  <td className="table__column__string">
235
                    {player.firstName} {player.lastName}
236
                  </td>
237
                  <td className="table__column__number show-for-medium">{player.gamesPlayed}</td>
238
                  <td className="table__column__number">{player.gamesWon}</td>
239
                  <td className="table__column__number">{player.gamesEqual}</td>
240
                  <td className="table__column__number">{player.gamesLost}</td>
241
                  <td className="table__column__number">{player.yellowCards}</td>
242
                  <td className="table__column__number">{player.redCards}</td>
243
                  <td className="table__column__number">{player.goals}</td>
244
                  <td className="table__column__number show-for-medium">{player.cleanSheets}</td>
245
                  <td className="table__column__number">{player.minutes || `0`}'</td>
246
                </tr>
247
              )
248
            })}
249
        </tbody>
250
      </table>
251
    </Card>
252
  )
253
}
254
255
export default TeamStats
256